{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# FAQ\n",
    "\n",
    "#### Q: What is the difference between EvalML and other AutoML libraries?\n",
    "\n",
    "EvalML optimizes machine learning pipelines on [custom practical objectives](objectives.ipynb) instead of vague machine learning loss functions so that it will find the best pipelines for your specific needs. Furthermore, EvalML [pipelines](pipelines.ipynb) are able to take in all kinds of data (missing values, categorical, etc.) as long as the data are in a single table. EvalML also allows you to build your own pipelines with existing or custom components so you can have more control over the AutoML process. Moreover, EvalML also provides you with support in the form of [data checks](data_checks.ipynb) to ensure that you are aware of potential issues your data may cause with machine learning algorithms.\n",
    "\n",
    "#### Q: How does EvalML handle missing values?\n",
    "\n",
    "EvalML contains imputation components in its pipelines so that missing values are taken care of. EvalML optimizes over different types of imputation to search for the best possible pipeline. You can find more information about components [here](components.ipynb) and in the API reference [here](../autoapi/evalml/pipelines/components/index.rst#evalml.pipelines.components.SimpleImputer).\n",
    "\n",
    "#### Q: How does EvalML handle categorical encoding?\n",
    "\n",
    "EvalML provides a [one-hot-encoding component](../autoapi/evalml/pipelines/components/index.rst#evalml.pipelines.components.OneHotEncoder) in its pipelines for categorical variables. EvalML plans to support other encoders in the future.\n",
    "\n",
    "#### Q: How does EvalML handle feature selection?\n",
    "\n",
    "EvalML currently utilizes scikit-learn's [SelectFromModel](https://scikit-learn.org/stable/modules/generated/sklearn.feature_selection.SelectFromModel.html) with a Random Forest classifier/regressor to handle feature selection. EvalML plans on supporting more feature selectors in the future. You can find more information in the API reference [here](../autoapi/evalml/pipelines/components/index.rst#evalml.pipelines.components.RFClassifierSelectFromModel).\n",
    "\n",
    "#### Q: How is feature importance calculated?\n",
    "\n",
    "Feature importance depends on the estimator used. Variable coefficients are used for regression-based estimators (Logistic Regression and Linear Regression) and Gini importance is used for tree-based estimators (Random Forest and XGBoost).\n",
    "\n",
    "#### Q: How does hyperparameter tuning work?\n",
    "\n",
    "EvalML tunes hyperparameters for its pipelines through Bayesian optimization. In the future we plan to support more optimization techniques such as random search. \n",
    "\n",
    "#### Q: Can I create my own objective metric?\n",
    "\n",
    "Yes you can! You can [create your own custom objective](objectives.ipynb) so that EvalML optimizes the best model for your needs.\n",
    "\n",
    "#### Q: How does EvalML avoid overfitting?\n",
    "\n",
    "EvalML provides [data checks](data_checks.ipynb) to combat overfitting. Such data checks include detecting label leakage, unstable pipelines, hold-out datasets and cross validation. EvalML defaults to using Stratified K-Fold cross-validation for classification problems and K-Fold cross-validation for regression problems but allows you to utilize your own cross-validation methods as well.\n",
    "\n",
    "#### Q: Can I create my own pipeline for EvalML?\n",
    "\n",
    "Yes! EvalML allows you to create [custom pipelines](pipelines.ipynb) using modular components. This allows you to customize EvalML pipelines for your own needs or for AutoML.\n",
    "\n",
    "#### Q: Does EvalML work with X algorithm?\n",
    "\n",
    "EvalML is constantly improving and adding new components and will allow your own algorithms to be used as components in our pipelines."
   ]
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.6"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 4
}
